
package middlewareWeb;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;
import javax.jws.*;

/**
 *Classe che modellizza un fornitori di servizi
 * @author myusy
 */
@WebService()
public class ServiceWorker1 {
/**
    *Metodo costruttore
    */
    public ServiceWorker1(){}

    /**
    *Metodo che fornisce la risposta alla PREPARE del transaction manager
     * @param s
     * @return stringa di "READY" o "NOT READY"
    */
    @WebMethod
    public String prepare1(String s){
        if (s.compareTo("PREPARE")==0){
            if(ready()) {
                scriviFile("READY");
                return "READY";
            }
        }
        return "NOT_READY";
    }

    /**
    *Metodo che verifica l'ultimo stato della coda consultando il file di log
     * @return true se la coda è vuota, false se la coda ha almeno un elemento
    */
    private synchronized boolean ready(){
        XMLReader r = new XMLReader();
        String s = r.controlloXML("log_worker1_status.xml", "oggetti-in-coda");
        if(s.compareTo("0")==0)
            return true;
        else
            return false;   
    }
    /**
    *Metodo che ritorna l'ack al TM una volta ricevuta la decisione
     * @param stringa che contiene la decisione presa dal TM
     * @return stringa contenente ACK
    */
    @WebMethod
    public String decision1(String global_decision){
        scriviFile(global_decision);
        return "ACK";
    }
    
    private synchronized String scriviFile(String s){
        String path = "/home/myusy/NetBeansProjects/MiddleWareWebApp/TransactionFile/Worker1Transaction.txt";
        try {
          File file = new File(path);
          FileWriter fw;
          if(file.exists())
            fw = new FileWriter(file,true);
          else
            fw = new FileWriter(file);
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(s+"\n");
          bw.flush();
          bw.close();
        }
        catch(IOException e) {
          e.printStackTrace();
        }
        return s;
    }

}